# 需求一 交换 字符串变量的值
s1 = '刘亦菲'
s2 = '聂茹凤'

# # 方式一，采用临时变量(第三方变量)
# tmp = s1
# s1 = s2
# s2 = tmp

# print(f's1={s1},s2={s2}')

# 方式二： 拆包
s1,s2 = s2,s1

print(f's1={s1},s2={s2}')

print('-' * 30)

# 需求而： 交换数字
a = 10
b = 20

# 方式一： 临时变量
# tmp = a
# a = b
# b = tmp

# 方式二 拆包
# a,b = b,a

# 方式三：算数运算符
"""
a = 10 b = 20
"""
# a = a + b  # a= 30 b = 20
# b = a - b # b=30-20=10   a = 30
# a = a - b # a=30-10=20 b = 10
# print(f'a={a},b={b}')

# 方式四：位运算 两个位都为1时结果为1，否则为0
# 按位与  & (0101 & 0011) = 1 (0001)

# 按位或 (OR) |  两个位中至少一个为1时结果为1
# 示例：5 | 3 (0101 | 0011) = 7 (0111)

# 按位异或 (XOR) ^ 两个位不同时结果为1，相同时为0
# 示例：5 ^ 3 (0101 ^ 0011) = 6 (0110)

# 按位取反 (NOT) ~ 所有位取反（0变1，1变0）
# 示例：~5 (~0101) = -6 (在补码表示中)

# 左移 <<   所有位向左移动，低位补0
# 示例：5 << 1 (0101 << 1) = 10 (1010)

# 右移 >> 所有位向右移动，高位补符号位（算术右移）
# 示例：-5 >> 1 = -3 (保持符号)


# Java 中 一个数字占32位
# 00000000  00000000  00000000 00000001  表示十进制的 1
# 10000000  00000000  00000000 00000001  表示十进制的 -1

# Python中 Int是一个可变长度 不管长度如何变化，最小也得是一个字节(8位)
# 00000001 表示1
# 10000001 表示-1
"""
    正数的源码，反码，补码都是一样的，比如i = 10
    源码：00000000  00000000  00000000  00001010
	反码：00000000  00000000  00000000  00001010
	补码：00000000  00000000  00000000  00001010

   	对于负数而言，直接计算出来的是它的原码，反码是在原码的基础上保持最高位不变，
   	其余位置上的0变1,1变0；补码是在反码的基础上加1。例如：
	I = 19;
	源码：10000000   00000000  00000000   00010011
	反码：11111111   11111111   11111111  11101100
    补码：11111111   11111111   11111111  11101101
"""

"""
 计算 -5
    源码： 10000101
    反码： 11111010
    补码： 11111011
所有的计算计算的都是补码

-5 >> 1
# 补码 11111101
# 反码:11111100
# 源码:10000011
十进制  -3

-2 >>1
# 源码: 10000010
# 反码: 11111101
# 补码: 11111110  

位移1位
补码 ： 11111111
反码:   11111110
源码    10000001
值:  -1

-3 >> 2
源码: 10000011
反码: 11111100
补码: 11111101

右位移 2  # 正数补 0，负数补 1
补码  11111111
反码  11111110
源码  10000001
值 -1

"""

# 一个数字 ，被另一个数字 按位 异或 两次 ，该数字值不变
"""
两个位不同时结果为1，相同时为0

a ：  00000101
b ：  00000011
---------------
      00000110
      00000011
---------------
      00000101
"""
# a = 5
# b = 3
# c = a ^ b ^ b
# print(c)

a = 10
b = 20
# 交换两个数字的位置
a = a ^ b  # a = 10^20, b = 20 ,
b = a ^ b  # a = a ^ b ,  b = a ^ b  ^ b = 10 ^ 20 ^ 20 = 10

a = a ^ b # a = a^ b   , a= (a ^ b) ^ (a ^ b  ^ b)

print(f'a={a}')
print(f'b={b}')


